/**
 * 创建UDP服务端
 */

import dgram from 'node:dgram'
import { Buffer } from 'node:buffer'

const server = dgram.createSocket('udp4')

/**
 * const server = dgram.createSocket('udp4', (msg, rinfo) => {
      这里的回调跟下面监听 事件 message 是一样的
 * })
 */

server.on('message', (msg, rinfo) => {
  console.log('接收： 客户端发送的消息: ', msg);
  console.log(msg.toString());
  console.log('发送方-客户端地址信息', rinfo);

  const buf = Buffer.from('确认信息：' + msg)

  server.send(buf, 0, buf.length, rinfo.port, rinfo.address)

  setTimeout(() => {
    // 如果使用close 会抛出错误: 先启动服务端， 然后10s内，启动多个客户端，这样服务端会保持和多个客户端连接，如果客户端主动关闭，服务端调用 close,会抛出throw new ERR_SOCKET_DGRAM_NOT_RUNNING();

    // 解法办法： 当服务端没有任何客户端连接，允许服务端主动关闭，调用 unref 代替 close
    // server.close()
    server.unref()
  }, 10 * 1000);
})

server.on('listening', () => {
  console.log('服务启动，端口 8080');
  // { address: '0.0.0.0', family: 'IPv4', port: 8080 }
  console.log(server.address());
})

server.on('close', () => {
  console.log('服务端连接-断开了');
})

// 绑定端口号，否则 客户端不知道往哪个端口号发消息
server.bind(8080)

